package com.yadang.infra.annotations;

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import org.springframework.beans.BeansException;

@Component
public class MyAnnotationBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        /**
         * bean.getClass()
         * bean 是一个对象实例，通过调用 getClass() 方法，可以获得这个对象的 Class 类型的实例。这个 Class 实例代表了这个对象所属的类的元数据信息。
         *
         * isAnnotationPresent(TradeImport.class)
         * isAnnotationPresent(Class<? extends Annotation> annotationClass) 是 Class 类的一个方法。这个方法检查当前 Class 实例（也就是某个类的定义）是否被作为参数传递的注解类型标注。
         * 在这个例子中，TradeImport.class 表示 TradeImport 注解的 Class 对象。这意味着 isAnnotationPresent() 方法会检查代表当前对象类的 Class 实例是否被 TradeImport 注解标注。
         */
        if (bean.getClass().isAnnotationPresent(TradeImport.class)) {
            // 当Bean有@MyAnnotation注解时，执行相关操作
            System.out.println("Processing annotated bean: " + beanName);
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}